package com.agile.leetcode.canculateObjectSize;

import java.lang.instrument.Instrumentation;

/**
 * @Author:ChenZhangKun
 * @Date: 2020/6/1 20:46
 */

/**
 * 从方法名可以猜到，这里的premain是要先于main执行的，而先于main执行，这个动作只能由JVM来完成了。即在JVM启动时，先启动一个agent，操作如下：
 *
 * 假设main方法所在的jar包为：A.jar，premain方法所在的jar包为B.jar。注意为main所在的代码打包时，和其它工具类打包一样，需要声明一个MANIFEST.MF清单文件，如下所求：
 *  Manifest-Version: 1.0
 * Main-Class: yp.tools.Main
 * Premain-Class: yp.tools.SizeTool
 *
 * 然后执行java命令执行jar文件：
 * java -javaagent:B.jar -jar A.jar
 */
public class SizeTool {
    private static Instrumentation instrumentation;
    public static void premain(String args,Instrumentation inst){
        instrumentation=inst;
    }
    // 获取长度
    public static long getSize(Object o){
        return instrumentation.getObjectSize(o);
    }
}
